#ifndef CHATCLIENT_H
#define CHATCLIENT_H

#include <QWidget>
#include <QUdpSocket>
#include <QHostAddress>
#include <QThread>
#include <QMutex>
#include "database.h"

QT_BEGIN_NAMESPACE
class QTextEdit;
class QLineEdit;
class QPushButton;
class QLabel;
class QSpinBox;
class QComboBox;
QT_END_NAMESPACE

class ChatClient : public QWidget
{
    Q_OBJECT

public:
    ChatClient(QWidget *parent = nullptr);
    ~ChatClient();

private slots:
    // 连接到服务器
    void connectToServer();
    
    // 断开连接
    void disconnectFromServer();
    
    // 发送消息
    void sendMessage();
    
    // 处理接收到的数据
    void handleReadyRead();
    
    // 清空聊天记录
    void clearHistory();
    
    // 加载历史记录
    void loadHistory();
    
    // 切换主题
    void switchTheme();
    
    // 处理回车键发送
    void handleReturnPressed();

private:
    // 初始化界面
    void setupUI();
    
    // 应用主题样式
    void applyTheme(const QString &theme);
    
    // 添加聊天消息
    void addChatMessage(const QString &message, bool isOwn = false);
    
    // 获取当前时间戳
    QString getCurrentTimestamp();
    
    // 保存消息到本地
    void saveMessageLocally(const QString &message);

private:
    QUdpSocket *udpSocket;           // UDP套接字
    QHostAddress serverAddress;      // 服务器地址
    quint16 serverPort;              // 服务器端口
    QString userName;                // 用户名
    bool isConnected;                // 连接状态
    
    // 界面组件
    QTextEdit *chatTextEdit;         // 聊天显示区域
    QLineEdit *messageEdit;          // 消息输入框
    QLineEdit *nameEdit;             // 用户名输入框
    QLineEdit *serverEdit;           // 服务器地址输入框
    QSpinBox *portSpinBox;           // 端口输入框
    QPushButton *connectButton;      // 连接按钮
    QPushButton *disconnectButton;   // 断开按钮
    QPushButton *sendButton;         // 发送按钮
    QPushButton *clearButton;        // 清空按钮
    QPushButton *historyButton;      // 历史记录按钮
    QPushButton *themeButton;        // 主题切换按钮
    QLabel *statusLabel;             // 状态标签
    QComboBox *themeComboBox;        // 主题选择框
    
    Database *database;              // 数据库对象
    QString currentTheme;            // 当前主题
};

#endif // CHATCLIENT_H
